ASI會自動在js的最後一段補上分號;
但這樣的機制有時候也並非是好事。
function callName () {
return
'叫我小明';
}
console.log(callName);
這樣的執行結果,會出現undefined。
因為ASI自動在return的後方加上了分號,所以程式碼只執行到return一個空的東西就結束。
另外還有
if (1 > 10) a = 1
else a = 2
console.log(a)
這樣的執行結果沒有問題,a會等於2
但如果我們要變成同一行寫法的話就會出現語法錯誤
if (1 > 10) a = 1 else a = 2 console.log(a)
所以結論就是,撰寫的時候還是自己加上分號比較好。
“不會” 發生 ASI 的規則:
(
、[
、/
開始 (容易出錯的地方)var a = 1
var b = a
(a + b).toString()
(function() { })()
(function() { })()
var a = 1
var b = a
/test/.test(b)
+
、-
、*
、%
作開始 (會影響執行結果)var a = 2
var b = a
+a
,
、.
作開始 (需注意執行結果)var a = 2
var b = a
.toString()
console.log(typeof b)
var a = 1
,b = 2 // b 一樣會 var 被宣告
因此,遇到以上的標點符號前方加入分號也是解決辦法
ex:
// 執行錯誤
(function() { })()
(function() { })()
// 正確
;(function() { })()
;(function() { })()
以上就是本篇的分享~汪汪